/**
 * Author(s): xuming.Wong <xuming.Wong@gmail.com>
 */
#ifndef __FLOW_LAYOUT_H__
#define __FLOW_LAYOUT_H__

#include <QtCore/QRect>
#include <QtGui/QLayout>
#include <QtGui/QWidgetItem>

namespace PQBuilder
{
	 class FlowLayout : public QLayout
	 {
	 public:
		 FlowLayout(QWidget *parent, int margin = -1, int hSpacing = -1, int vSpacing = -1);
		 FlowLayout(int margin = -1, int hSpacing = -1, int vSpacing = -1);
		 ~FlowLayout();

		 void addItem(QLayoutItem *item);
		 int horizontalSpacing() const;
		 int verticalSpacing() const;
		 Qt::Orientations expandingDirections() const;
		 bool hasHeightForWidth() const;
		 int heightForWidth(int) const;
		 int count() const;
		 QLayoutItem *itemAt(int index) const;
		 QSize minimumSize() const;
		 void setGeometry(const QRect &rect);
		 QSize sizeHint() const;
		 QLayoutItem *takeAt(int index);

	 private:
		 int doLayout(const QRect &rect, bool testOnly) const;
		 int smartSpacing(QStyle::PixelMetric pm) const;

		 QList<QLayoutItem *> itemList;
		 int _hSpace;
		 int _vSpace;
	 };
}
#endif
